/**
 * 
 */
package factory;

import java.util.ArrayList;
import java.util.Date;

import metier.*;
import metier.JDBC.*;

/**
 * @author Quipu-Team
 *
 */
public class FactoryJDBC extends Factory {

	public void FatoryJDBC() {}
	
	/* CREATION INSTANCE CLASSE METIER */
	@Override
	public Salle creerSalle(String nom, int capacite) {return new SalleJDBC(nom, capacite);}

	@Override
	public Seance creerSeance(Service service, Salle salle, Date periode, int position) {
		return new SeanceJDBC(service, salle, periode, position);
	}
	
	@Override
	public StatutEnseignant creerStatutEnseignant(String nom, int nbHeure) {
		return new StatutEnseignantJDBC(nom,nbHeure);
	}
	
	@Override
	public Service creerService(See see, Enseignant enseignant, TypeHeure typeheure, Groupe groupe) {
		return new ServiceJDBC(see, enseignant, typeheure, groupe);
	}

	public TypeEnseignement creerTypeEnseignement(String nom, int nombreHeuresEq){
            return new TypeEnseignementJDBC(nombreHeuresEq,nom);
        }
        public See creerSee(Matiere matiere, TypeEnseignement tpe,int nombreHeures)
        {

            return new SeeJDBC(matiere,tpe,nombreHeures);
        }

        public Groupe creerGroupe() throws ExceptionMetier
                {
            return new GroupeJDBC();
        }

	@Override
	public Enseignant creerEnseignant(String nom, String prenom, StatutEnseignant statut) {
		return new EnseignantJDBC(nom,prenom,statut);
	}

        public Matiere creerMatiere(){
            return new MatiereJDBC();
        }


	
	/* CREATION COLLECTION D'INSTANCES METIER */
	
	
	@Override
	public ArrayList<ElementListe> creerListeGroupe() {
		
		ArrayList<ElementListe> liste = null;
		try {liste = GroupeJDBC.select();} 
		catch (ExceptionMetier e) {e.printStackTrace();}
		return liste;
		
		
		// R�cup�re tous les groupes de la base de donn�es
		/*ResultSet res = GroupeJDBC.select();
		
		try {
			while (res.next())
			{		
				listGroupe.add(new GroupeJDBC(res.getString("nomGroupe"),Integer.parseInt(res.getString("nombreEtudiant"))));
			}
		} 
		catch (NumberFormatException e) {e.printStackTrace();} 
		catch (SQLException e) {e.printStackTrace();}*/
		
	}

        public ArrayList<ElementListe> creerListeGroupeSemestre(int idSemestre) throws ExceptionMetier{
		return GroupeJDBC.selectSemestre(idSemestre);
	}
	
	public ArrayList<ElementListe> creerListeEnseignant() {
		ArrayList<ElementListe> liste = null;
		try {liste = EnseignantJDBC.select();} 
		catch (ExceptionMetier e) {e.printStackTrace();}
		return liste;
	}

	@Override
	public ArrayList<ElementListe> creerListeStatutEnseignant() {
		ArrayList<ElementListe> liste = null;
		try {liste = StatutEnseignantJDBC.select();} 
		catch (ExceptionMetier e) {e.printStackTrace();}
		return liste;
	}

	

	@Override
	public ArrayList<ElementListe> creerListeService() 
	{
		ArrayList<ElementListe> liste= null;
		try {liste = ServiceJDBC.select();} 
		catch (ExceptionMetier e) {e.printStackTrace();}
		return liste;
	}



	public ArrayList<UE> creerListeUE() {
		// TODO Auto-generated method stub
		return null;
	}
	
	
	@Override
	public ArrayList<ElementListe> creerListeSalle() {
		ArrayList<ElementListe> liste= null;
		try {liste = SalleJDBC.select();} 
		catch (ExceptionMetier e) {e.printStackTrace();}
		return liste;
	}
	
	public ArrayList<ElementListe> creerListeFormation() {
		ArrayList<ElementListe> liste= null;
		try {liste = FormationJDBC.select();} 
		catch (ExceptionMetier e) {e.printStackTrace();}
		return liste;
	}
	
	@Override
	public ArrayList<ElementListe> creerListeSeance() {
		ArrayList<ElementListe> listeSeance = null;
		try {listeSeance = SeanceJDBC.select();} 
		catch (ExceptionMetier e) {e.printStackTrace();}
		return listeSeance;
	}
	
	@Override
	public ArrayList<ElementListe> creerListeSeanceSpeciale() throws ExceptionMetier 
	{ return SeanceJDBC.selectSpecial(); }
	@Override
	public ArrayList<Seance> creerListeSeanceSpeciale(Date debut, Date fin) throws ExceptionMetier
	{ return SeanceJDBC.selectSpecial(debut, fin); }

        public  ArrayList<ElementListe> creerListeTypeEnseignement()throws ExceptionMetier{
            return TypeEnseignementJDBC.select();
        }

        public ArrayList<ElementListe> creerListeSee()throws ExceptionMetier{
            return SeeJDBC.select();
        }

        public ArrayList<ElementListe> creerListeSeeSemestre(int idSemestre)throws ExceptionMetier{
            return SeeJDBC.selectSemestre(idSemestre);
        }

	@Override
	public ArrayList<Seance> creerListeSeancePeriode(int annee, int ue, int enseignant, Date deb, Date fin) throws ExceptionMetier {
		return SeanceJDBC.selectConsultation(annee, ue, enseignant, deb, fin);
	}

	@Override
	public ArrayList<ElementListe> creerListeAnneeEtude() throws ExceptionMetier {
		// TODO Auto-generated method stub
		return AnneeEtudeJDBC.select();
	}

	@Override
	public Formation creerFormation(String nom, String description) {
		// TODO Auto-generated method stub
		return new FormationJDBC(nom,description);
	}


	@Override
	public ArrayList<Service> creerListeService(int idAnneeEtude,
			int listeEnseignantsFiltre, int listeUEsFiltre) {
		// TODO Auto-generated method stub
		return new ArrayList<Service>();
	}

	@Override
	public Matiere creerMatiere(UE ue, String nom, String description, int coefficient) {
		return new MatiereJDBC(ue, nom, description, coefficient);
	}

	@Override
	public ArrayList<ElementListe> creerListeMatiere() throws ExceptionMetier {
		ArrayList<ElementListe> liste= null;
		liste = MatiereJDBC.select(); 
		return liste;
	}


	@Override
	public ArrayList<ElementListe> creerListeService(int see) throws ExceptionMetier {
		ArrayList<ElementListe> liste= null;
		liste = ServiceJDBC.select(see);
		return liste;
	}
	@Override
	public ArrayList<ElementListe> creerListeServiceMatiere(int matiere) throws ExceptionMetier {
		ArrayList<ElementListe> liste= null;
		liste = ServiceJDBC.selectMatiere(matiere);
		return liste;
	}
	@Override
	public AnneeEtude creerAnneeEtude() {
		return new AnneeEtudeJDBC();
	}

        public See creerSee(){
            return new SeeJDBC();

        }

        public TypeEnseignement creerTypeEnseignement(){
            return new TypeEnseignementJDBC();
        }

	

	

	
	@Override
	public ArrayList<ElementListe> creerListeSemestre() throws ExceptionMetier {
		ArrayList<ElementListe> liste= null;
		liste = SemestreJDBC.select(); 
		return liste;
	}

	@Override
	public Semestre creerSemestre(String nom, AnneeEtude annee,
			Date debut, Date fin) {
		return new SemestreJDBC(nom, annee, debut, fin);
	}

	@Override
	public Formation creerFormation() {
		return new FormationJDBC();
	}


	@Override
	public ArrayList<ElementListe> creerListeMatiereSemestre(int semestre) throws ExceptionMetier {
		ArrayList<ElementListe> liste= null;
		liste = MatiereJDBC.selectSemestre(semestre); 
		return liste;
	}

	@Override
	public ArrayList<ElementListe> creerListeSeanceMatiere(int matiere) throws ExceptionMetier {
		return SeanceJDBC.selectMatiere(matiere);
		
	}

	@Override
	public ArrayList<ElementListe> creerListeConge(AnneeEtude annee) throws ExceptionMetier{
		
		return CongeJDBC.select((AnneeEtudeJDBC)annee);
	}

	@Override
	public ArrayList<ElementListe> creerListeSemestre(AnneeEtude annee) throws ExceptionMetier {
		System.out.println("ok factory");
		return SemestreJDBC.creerListeSemestre((AnneeEtudeJDBC)annee);
	}


	@Override
	public Semestre creerSemestre() {
		// TODO Auto-generated method stub
		return new SemestreJDBC();
	}

	public ArrayList<ElementListe> creerListeTypeHeure() throws ExceptionMetier {
		ArrayList<ElementListe> liste= null;
		liste = TypeHeureJDBC.select();
		
		return liste;
	}


	@Override
	public Groupe creerGroupe(String nom, int nombreEtudiants, Semestre semestre) {
		return new GroupeJDBC(nom, nombreEtudiants, semestre);
	}

	@Override
	public TypeHeure creerTypeHeure(String nom) {
		// TODO Auto-generated method stub
		return new TypeHeureJDBC(nom);
	}

	@Override
	public Conge creerConge() {
		// TODO Auto-generated method stub
		return new CongeJDBC();
	}

        public Incompatibilite creerIncompatibilite()throws ExceptionMetier {
            return new IncompatibiliteJDBC();
        }

        public Incompatibilite creerIncompatibilite(Groupe g1, Groupe g2)throws ExceptionMetier {
            return new IncompatibiliteJDBC(g1,g2);
        }

        public ArrayList<ElementListe> creerListeIncompatibilite()throws ExceptionMetier{
            return IncompatibiliteJDBC.select();
        }

        public ArrayList<ElementListe> creerListeIncompatibiliteGroupe(int idGroupe)throws ExceptionMetier{
            return IncompatibiliteJDBC.selectGroupe(idGroupe);
        }


}
